/*
 * Protocol.h
 *
 *  Created on: 05/07/2013
 *      Author: gilvan
 */

#ifndef PROTOCOL_H_
#define PROTOCOL_H_

#include "Message.h"
#include "cgeDatagramSocket.h"

using basterd::net::DatagramPacket;
using basterd::net::DatagramSocket;

class Protocol
{
public:
	Protocol( unsigned short port=666 );
	virtual ~Protocol();


	virtual void send( const Message& msg, const String& address, unsigned short port );

	/**
	 *
	 * @return Ponteiro para mensagem recebida.
	 * 		   NULL, caso seja recebida uma mensagem não suportada.
	 */
	virtual Message* receive(void);

protected:

	virtual void _receive( const DatagramPacket& pacote, Message* msg, const StringVector& tokens );

private:

	Protocol( const Protocol& );
	Protocol& operator=( const Protocol& );
	/// Socket UDP para comunicação
	DatagramSocket udp;
};

#endif /* PROTOCOL_H_ */
